import { ProjectUploadFileType } from '@/modules/project'
import { FILE_TYPES } from '@/constants/project'

/**
 * 选择的文件转URL
 */
export function fileToUrl(file:File) {
  return window.URL.createObjectURL(file)
}

/**
 * 计算文件大小
 */
export function renderSize(fsize:number) {
  if (typeof fsize !== 'number' || fsize === 0) {
    return ''
  }
  const unitArr = ['Bytes', 'KB', 'MB', 'GB', 'TB', 'PB', 'EB', 'ZB', 'YB']

  const srcsize = parseFloat(String(fsize))

  const index = Math.floor(Math.log(srcsize) / Math.log(1024))

  const size = (srcsize / Math.pow(1024, index)).toFixed(2)

  return size + unitArr[ index ]
}
/**
 * 根据后缀名计算文件类型
 */
export function renderFileType(suffix:string) {
  const type = FILE_TYPES.find(item => item.reg.test(suffix))
  return type ? type.value : 3
}

/**
 * 根据环境变量获取文件名，只有正式环境不加test, 其他环境文件名都前加/test
 */
export function getFilename(name:string) {
  return import.meta.env.VITE_APP_ORIGIN === 'https://ahapocket.cn' ? name : 'test/' + name
}

/**
 * 格式化选择的文件
 */
export function formatFile(file: File):ProjectUploadFileType {
  const nameSplitIndex = file.name.lastIndexOf('.')
  const data = {
    id: Date.now(),
    raw: file,
    name: file.name.slice(0, nameSplitIndex),
    suffix: file.name.slice(nameSplitIndex + 1),
    size: renderSize(file.size),
    typeId: 4,
    fileType: renderFileType(file.name.slice(nameSplitIndex + 1)),
    progress: 0,
    status: 0,
    price: 0,
    passed: false,
  }
  return data
}

/**
 * cos文件上传
 * @param {String} file 文件
 * @param {Object} signature 签名
 * @param {Function} updateCb 上传回调，返回上传进度
 */
import axios from 'axios'
export function cosUpload(file:File, signature:any, updateCb?:Function):Promise<string> {
  return new Promise((resolve, reject) => {
    /* 构造表单数据 */
    const formData = new FormData()

    formData.append('key', signature.filename)
    formData.append('policy', signature.policy)
    formData.append('q-sign-algorithm', 'sha1')
    formData.append('q-ak', signature.secretId)
    formData.append('q-key-time', signature.keyTime)
    formData.append('q-signature', signature.signature)
    formData.append('file', file)
    axios({
      url: `https://${ signature.bucketName }.cos.${ signature.region }.myqcloud.com`,
      method: 'POST',
      data: formData,
      headers: {
        'Content-Type': 'multipart/form-data'
      },
      onUploadProgress: (progressEvent) => { // 监听上传进度
        if (updateCb) {
          updateCb(Math.round(progressEvent.loaded / progressEvent.total * 100) || 0)
        }
      }
    })
      .then(res => {
        if (res.status === 204) {
          resolve(res.config.url + signature.filename)
        } else {
          reject(res)
        }
      })
      .catch(err => {
        reject(err)
      })
  })
}

/**
 * 获取文件URL
 * @param {Object} signature 签名
 * @returns
 */
// export function getFileUrl(signature:any) {
//   return new Promise((resolve, reject) => {
//     let cos

//     try {
//       cos = new COS({
//         getAuthorization: (options, callback) => {
//           callback({
//             Authorization: signature.authorization
//           })
//         }
//       })
//     } catch (err) {
//       reject(err)
//     }

//     cos.getObjectUrl({
//       Bucket: signature.bucketName,
//       Region: signature.region,
//       Key: signature.filename,
//       Sign: true
//     }, (err, data) => {
//       if (err) {
//         reject(err)
//       } else {
//         resolve(data.Url)
//       }
//     })
//   })
// }
